<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Encryption Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />
</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker_th.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>คู่มือการใช้งาน CodeIgniter เวอร์ชั่น 1.7.2</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">หน้าตารางเนื้อหา</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.in.th/">CodeIgniter.in.th</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">หน้าหลักคู่มือการใช้งาน</a> &nbsp;&#8250;&nbsp;
Encryption Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.in.th/user_guide/" />ค้นหาคู่มือการใช้งาน&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="ค้นหา" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>Encryption Class</h1>

<p>คลาส Encryption  สามารถทำการเข้ารหัสและถอดรหัสข้อมูลได้  โดยใช้รูปแบบที่ก่อนจะเข้ารหัสข้อความนั้นจะสุ่มรูปแบบ &quot;hashed bitwise XOR encoding&quot; ซึ่งมันจะถูกเข้ารหัสโดยใช้ไลบรารี่ Mcrypt   ถ้า Mcrypt ไม่สามารถใช้งานได้บนเซิร์ฟเวอร์ของคุณ ระบบเข้ารหัสข้อความนั้นจะยังคงทำหน้าที่ความปลอดภัยได้สมเหตุสมผล สำหรับการเข้ารหัส session หรืออื่นๆอย่างเช่นจุดประสงค์ที่จะทำให้มัน "light" 
ถ้ามี Mcrypt คุณจะได้ผลที่ดีมากขึ้นเพราะมันจะทำการเข้ารหัสข้อความถึงสองชั้น ซึ่งทำให้มีความปลอดภัยที่สูงมาก</p>


<h2>ตั้งค่ากุญแจ</h2>

<p><em>กุญแจ</em> คือส่วนของหนึ่งของการควบคุมระบบใส่รหัสและถอดรหัส
ในความเป็นจริงแล้ว การเลือกใช้กุญแจนั้นจะ<strong>มีความหมาย</strong>กับการถอดรหัสข้อมูลที่ถูกเข้ารหัสด้วยกุญแจนั้น
ไม่เพียงแต่จะต้องเลือกกุญแจอย่างระมัดระวัง คุณจะต้องไม่เปลี่ยนมันเลยถ้าคุณจะใช้มันกับข้อมูลถาวร</p>

<p>เราจะไปต่อไม่ได้ถ้าไม่พูดเรื่องวิธีป้องกันกุญแจคุณ
ถ้ามีใครเข้าได้กุญแจคุณไป ข้อมูลเหล่านั้นจะสามารถถูกถอดรหัสได้อย่างง่ายดาย  ถ้าเซิร์ฟเวอร์ของคุณนั้นคุณไม่สามารถควบคุมได้ทั้งหมด
มันจะเป็นไปไม่ได้เลยที่จะแน่ใจว่ากุญแจนั้นอยู่ในความปลอดภัยดังนั้น คุณอาจจะต้องคิดให้ดีก่อนที่จะใช้มันสำหรับความปลอดภัยขั้นสูง เช่นเก็บข้อมูลบัตรเครดิต</p>

<p>เพื่อประโยชน์ความปลอดภัยสูงสุดในการเข้ารหัส คุณควรใช้กุญแจขนาดความยาว 32 ตัวอักษร (128 bits)
กุญแจควรที่จะเป็นสตริงแบบสุ่มซึ่งประกอบด้วย ตัวเลข ตัวอักษรพิมพ์ใหญ่ และตัวอักษรพิมพ์เล็ก
และกุญแจมัน<strong>ไม่ควร</strong>จะเป็นข้อความสตริงธรรมดา เพื่อการเข้ารหัสที่ปลอดภัย มันควรจะเป็นแบบสุ่มมากที่สุด</p>

<p>กุญแจคุณสามารถถูกเก็บอยู่ใน <dfn>application/config/config.php</dfn> หรือคุณสามารถที่จะออกแบบวิธีเก็บและส่งกุญแจของคุณเองได้เวลาเข้ารหัสหรือถอดรหัสได้</p>

<p>ในการเก็บกุญแจของคุณ <dfn>application/config/config.php</dfn> ให้เปิดไฟล์และตั้งค่า</p>
<code>$config['encryption_key'] = "YOUR KEY";</code>


<h2>ความยาวของข้อความ</h2>

<p>มันเป็นสิ่งสำคัญสำหรับคุณที่จะรู้ว่าข้อความที่ถูกเข้ารหัสนั้น ฟังก์ชันเข้ารหัสจะทำให้เกิดข้อความที่ยาวกว่าข้อความปกติประมาณ 2.6 เท่า  ตัวอย่างเช่น ถ้าคุณจะเข้ารหัสสตริง "my super secret data" ซึ่งมีความยาวตัวอักษร 21 ตัว คุณจะได้ตริงหลังการเข้ารหัสราวๆ 55 ตัวอักษร(เราใช้คำว่า "ราวๆ" นั้นเพราะสตริงที่ถูกเข้ารหัสจะเพิ่มขึ้น
64 บิต ซึ่งมันไม่ใช่การเพิ่มข้อแน่นอนเป็นเส้นตรง) เก็บข้อมูลตรงนี้ไว้เมื่อจะทำการเก็บข้อมูลลงในวิธีการต่างๆ ตัวอย่างเช่น Cookies ซึ่งสามารถเก็บข้อมูลได้ 4K</p>


<h2>เริ่มต้นใช้คลาส</h2>

<p> เหมือนคลาสอื่นๆของ CodeIgniter คลาส  Encryption   นั้นเริ่มต้นได้ในตัวบควมคุม(controller) โดยใช้ฟังก์ชัน $this-&gt;load-&gt;library</p>

<code>$this->load->library('encrypt');</code>
<p> เมื่อโหลดแล้วคุณสามารถใช้ออบเจ็ค Encrypt ได้โดยการใช้ <dfn>$this->encrypt</dfn></p>


<h2>$this->encrypt->encode()</h2>

<p>ทำการเข้ารหัสข้อมูลและส่งกลับมาเป็นสตริง ตัวอย่างเช่น</p>
<code>
$msg = 'My secret message';<br />
<br />
$encrypted_string = $this->encrypt->encode($msg);</code>

<p>คุณสามารถใส่กุญแจเองได้ในพารามิเตอร์ที่สองถ้าคุณไม่อยากใช้กุญแจที่ใส่ไว้ในไฟล์ปรับแต่ง (config.php)</p>

<code>
$msg = 'My secret message';<br />
$key = 'super-secret-key';<br />
<br />
$encrypted_string = $this->encrypt->encode($msg, $key);</code>


<h2>$this->encrypt->decode()</h2>

<p>ถอดรหัสสตริง  ตัวอย่างเช่น</p>

<code>
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';<br />
<br />
$plaintext_string = $this->encrypt->decode($encrypted_string);</code>
<p>ฟังก์ชันนี้คุณก็สามารถใส่กุญแจเองได้ในพารามิเตอร์ที่สองถ้าคุณไม่อยากใช้กุญแจที่ใส่ไว้ในไฟล์ปรับแต่ง</p>

<h2>$this->encrypt->set_cipher();</h2>

<p>ยอมให้คุณตั้งค่ากุญแจสำหรับแปรรหัส Mcrypt ได้โดยปกติแล้วจะใช้ <samp>MCRYPT_RIJNDAEL_256</samp>. ตัวอย่างเช่น </p>
<code>$this->encrypt->set_cipher(MCRYPT_BLOWFISH);</code>
<p>คุณสามารถเข้าไปใน php.net เพื่อดูรายการทั้งหมดของ  <a href="http://php.net/mcrypt">ตัวแปรรหัสที่สามารถใช้ได้</a></p>

<p>ถ้าคุณต้องการจะตรวจสอบด้วยตัวเองว่าเซิร์ฟเวอร์ของคุณรองรับ Mcrypt หรือไม่คุณสามารถใช้คำสั่งนี้เพื่อดูได้</p>
<code>echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';</code>


<h2>$this->encrypt->set_mode();</h2>

<p>ยอมให้คุณตั้งค่ารูปแบบของ Mcrypt โดยปกติแล้วใช้ <samp>MCRYPT_MODE_ECB</samp>. ตัวอย่างเช่น </p>
<code>$this->encrypt->set_mode(MCRYPT_MODE_CFB);</code>
<p>คุณสามารถเข้าไปใน php.net เพื่อดูรายการทั้งหมดของ  <a href="http://php.net/mcrypt">โหมดที่สามารถใช้ได้</a></p>


<h2>$this->encrypt->sha1();</h2>
<p>ฟังก์ชันเข้ารหัสแบบ SHA1 โดยจะคืนค่าสตริงมาเป็น 160 bit แบบ hash ทางเดียวคือไม่สามารถถอดรหัสกลับได้  ข้อสังเกตุ  SHA1 ก็เหมือน MD5 คือไม่สามารถถอดรหัสกลับได้ ตัวอย่างเช่น</p>
<code>$hash = $this->encrypt->sha1('Some string');</code>

<p>โดยทั่วไปแล้วการติดตั้ง PHP จะรองรับ SHA1 อยู่แล้วดังนั้นถ้าความต้องการของคุณทั้งหมดคือการเข้ารหัส hash คุณสามารถใช้ฟังก์ชันที่มีอยู่แล้วได้คือ</p>

<code>$hash = sha1('Some string');</code>

<p>ถ้าเซิร์ฟเวอร์ของคุณไม่รองรับ SHA1 คุณสามารถใช้ฟังก์ชันนี้ที่เราเตรียมไว้ให้คุณได้</p>



</div>
<!-- END CONTENT -->


<div id="footer">
<p>
หัวข้ออันก่อน:&nbsp;&nbsp;<a href="email.html">Email Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">บนสุดของหน้า</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">หน้าหลักคู่มือการใช้งาน</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
หัวข้อถัดไป:&nbsp;&nbsp;<a href="file_uploading.html">File Uploading Class</a>
</p>
<p>คู่มือการใช้งาน CodeIgniter นี้ได้ทำการคัดลอกและดัดแปลงจาก <a href="http://codeigniter.com/user_guide/">CodeIgniter User Guide</a></p><p>
<a href="http://codeigniter.com">CodeIgniter</a>
 ·  Copyright © 2006-2009  · 
<a href="http://ellislab.com/">Ellislab, Inc.</a>
</p>
</div>

</body>
</html>